package com.chenfan.mcn.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.chenfan.mcn.dao.MonthlyTargetMapper;
import com.chenfan.common.extension.mybatisplus.enhanced.EnhancedService;
import com.chenfan.mcn.model.McnPage;
import com.chenfan.mcn.model.MonthlyTarget;
import com.chenfan.mcn.model.dto.MonthlyTargetDTO;
import com.chenfan.mcn.model.dto.MonthlyTargetSearchDTO;
import com.chenfan.mcn.model.vo.MonthlyTargetDetailVO;
import com.chenfan.mcn.model.vo.MonthlyTargetListVO;
import com.chenfan.mcn.model.vo.MonthlyTargetPageVO;

import java.util.Date;
import java.util.List;

/**
 * <p>
 * 部门目标 服务类
 * </p>
 *
 * @author lizhejin
 * @since 2021-10-19
 */
public interface MonthlyTargetService extends EnhancedService<MonthlyTargetMapper, MonthlyTarget> {

    /**
     * 指定月度部门目标金额详情
     *
     * @param monthlyCode 月度编号
     * @return List<MonthlyTargetDetailVO>
     */
    List<MonthlyTargetDetailVO> amountDetails(String monthlyCode);

    /**
     * 部门目标详情
     *
     * @param id id
     * @return MonthlyTargetDTO
     */
    MonthlyTargetDTO targetDetail(Long id);

    /**
     * 部门目标删除
     *
     * @param id id
     * @return Integer
     */
    Integer deleteTarget(Long id);

    /**
     * 月度目标编辑
     *
     * @param monthlyTargetDTO {@link MonthlyTargetDTO}
     * @return {@link Integer}
     */
    Integer updateTarget(MonthlyTargetDTO monthlyTargetDTO);

    /**
     * 新增月度部门目标
     *
     * @param monthlyTargetList {@link List<MonthlyTargetDTO>}
     * @return {@link Integer}
     */
    Integer addTarget(List<MonthlyTargetDTO> monthlyTargetList);

    /**
     * 月度目标列表
     *
     * @param dto {@link MonthlyTargetSearchDTO}
     * @return {@link MonthlyTargetListVO}
     */
    MonthlyTargetListVO targetList(MonthlyTargetSearchDTO dto);

    /**
     * 指定部门月度目标
     *
     * @param mcnPage {@link McnPage}
     * @param dto     {@link MonthlyTargetSearchDTO}
     * @return {@link IPage}
     */
    Page<MonthlyTargetPageVO> targetPage(McnPage<MonthlyTargetPageVO> mcnPage, MonthlyTargetSearchDTO dto);

    /**
     * 月度销售额更新落库
     * @param date
     */
    void updateMonthlySales(Date date);
}
